#include "Ptr.h"



_NS_OOP_BEGIN



template< class T >
Ptr< T >
ObjectRef::cvt () throw (TypeConvertFailException)
{
	if (__p_obj == NULL)
		return Ptr< T > ();
	if ((Object::isType< Wrapper > (__p_obj) && !Object::isObject< T > ())
			|| (!Object::isType< Wrapper > (__p_obj)
					&& dynamic_cast< T* > (__p_obj)))
		return Ptr< T > (__p_obj);
	OOPTHROW (TypeConvertFailException (typeid (*__p_obj).name (),
			typeid (T).name ()));
	return Ptr< T > ();
}



template< class T >
const Ptr< T >
ObjectRef::cvt () const throw (TypeConvertFailException)
{
	if (__p_obj == NULL)
		return Ptr< T > ();
	if ((Object::isType< Wrapper > (__p_obj) && !Object::isObject< T > ())
			|| (!Object::isType< Wrapper > (__p_obj)
					&& dynamic_cast< T* > (__p_obj)))
		return Ptr< T > (__p_obj);
	OOPTHROW (TypeConvertFailException (typeid (*__p_obj).name (),
			typeid (T).name ()));
}



_NS_OOP_END